package com.gxa.client_shoppings.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class CreateNumber {
    public static String getOrderNum() {
        int hashCodeV = UUID.randomUUID().toString().hashCode();
        if(hashCodeV < 0) {
            //有可能是负数
            hashCodeV = - hashCodeV;
        }
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String replace = formatter.format(new Date()).replace("-", "").replace(" ", "").replace(":","");
        return replace + String.format("%013d", hashCodeV);
    }


    // 生成大小写加数字混合的字符串，length为生成多少位
    public static String getRandomString_Aa1(int length) {
        String val = "";
        java.util.Random random = new java.util.Random();
        for (int i = 0; i < length; i++) {//定义随机数位数
            // 输出字母还是数字
            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
            // 字符串
            if ("char".equalsIgnoreCase(charOrNum)) {
                // 取得大写字母还是小写字母
                int choice = random.nextInt(2) % 2 == 0 ? 65 : 97;
                val += (char) (choice + random.nextInt(26));
            } else if ("num".equalsIgnoreCase(charOrNum)) { // 数字
                val += String.valueOf(random.nextInt(10));
            }
        }
        return val;
    }


    // 生成小写加数字混合的字符串，length为生成多少位
    public static String getRandomString_a1(int length) {
        String val1 = "";
        java.util.Random random = new java.util.Random();
        for (int i = 0; i < length; i++) {//定义随机数位数
            // 输出字母还是数字
            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
            // 字符串
            if ("char".equalsIgnoreCase(charOrNum)) {
                val1 += (char) (97 + random.nextInt(26));
            } else if ("num".equalsIgnoreCase(charOrNum)) { // 数字
                val1 += String.valueOf(random.nextInt(10));
            }
        }
        return val1;
    }


    // 生成大写加数字混合的字符串，length为生成多少位
    public static String getRandomString_A1(int length) {
        String val2 = "";
        java.util.Random random = new java.util.Random();
        for (int i = 0; i < length; i++) {//定义随机数位数
            // 输出字母还是数字
            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
            // 字符串
            if ("char".equalsIgnoreCase(charOrNum)) {
                val2 += (char) (65 + random.nextInt(26));
            } else if ("num".equalsIgnoreCase(charOrNum)) { // 数字
                val2 += String.valueOf(random.nextInt(10));
            }
        }
        return val2;
    }


    // 生成大小写加数字加特殊字符混合的字符串，length为生成多少位
    public static String getRandomPassword(int length) {
        // 1、定义基本字符串baseStr和出参password
        String password = null;
        String baseStr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|<>?";
        boolean flag = false;
        // 2、使用循环来判断是否是正确的密码
        while (!flag) {
            // 密码重置
            password = "";
            // 个数计数
            int a = 0,b = 0,c = 0,d = 0;
            for (int i = 0; i < length; i++) {
                int rand = (int) (Math.random() * baseStr.length());
                password+=baseStr.charAt(rand);
                if (0<=rand && rand<=9) {
                    a++;
                }
                if (10<=rand && rand<=35) {
                    b++;
                }
                if (36<=rand && rand<=61) {
                    c++;
                }
                if (62<=rand && rand<baseStr.length()) {
                    d++;
                }
            }
            // 3、判断是否是正确的密码（4类中仅一类为0，其他不为0）
            flag = (a*b*c!=0&&d==0)||(a*b*d!=0&&c==0)||(a*c*d!=0&&b==0)||(b*c*d!=0&&a==0);
        }
        return password;
    }


    //生成纯数字字符串，length为生成多少位
    public static String getRandomStringNum(int length){
        String num = "";
        java.util.Random random = new java.util.Random();
        for (int i = 0; i < length; i++) {
            num += String.valueOf(random.nextInt(10));
        }
        return num;
    }
}
